#pragma once
#include <string>
#include <iostream>
#include <ctemplate/template.h>
#include "oj_model.hpp"
namespace ns_view
{
    using namespace std;
    using namespace ns_model;
    class View
    {
    public:
        View(){};
        ~View(){};

    public:
        // struct Question
        // {
        //     std::string number; // 题目编号,唯一
        //     std::string title;  // 题目的标题
        //     std::string star;   // 难度：简单 中等 困难
        //     int cpu_limit;      // 题目的时间要求（s）
        //     int mem_limit;      // 题目的空间要求（kb）
        //     std::string desc;   // 题目的描述
        //     std::string header; // 题目预设给用户在线编辑器的代码
        //     std::string tail;   // 题目的测试用例  需要与header拼接形成完整的代码
        // };
        const std::string template_path = "./template_html/";
        void OneExpandHtml(const struct Question &q, std::string *html)
        {
             // 1.形成路径
            std::string src_html = template_path + "one_question.html";
            // 2.形成字典
            ctemplate::TemplateDictionary root("one question");
                root.SetValue("number",q.number);
                root.SetValue("title",q.title);
                root.SetValue("star",q.star);
                root.SetValue("desc",q.desc);
                root.SetValue("pre_code",q.header);
            // 3.获取被渲染的html
            ctemplate::Template *tpl = ctemplate::Template::GetTemplate(src_html, ctemplate::DO_NOT_STRIP);
            // 4.开始完成渲染功能
            tpl->Expand(html, &root);
        }
        void AllExpandHtml(const vector<struct Question> &questions, std::string *html)
        {
            // 1.形成路径
            std::string src_html = template_path + "all_questions.html";
            // 2.形成字典
            ctemplate::TemplateDictionary root("all questions");
            for (auto const &q : questions)
            {
                ctemplate::TemplateDictionary *sub = root.AddSectionDictionary("question_list");
                sub->SetValue("number", q.number);
                sub->SetValue("title", q.title);
                sub->SetValue("star", q.star);
            }
            // 3.获取被渲染的html
            ctemplate::Template *tpl = ctemplate::Template::GetTemplate(src_html, ctemplate::DO_NOT_STRIP);
            // 4.开始完成渲染功能
            tpl->Expand(html, &root);
        }
    };
}